package MyHashMap;

import java.util.Iterator;
import java.util.LinkedList;

public class MyHashMap {
    private static final int BASE = 769;
    private LinkedList[] data;
    private class Pair {
        private int key;
        private int value;

        public Pair(int key, int value) {
            this.key = key;
            this.value = value;
        }
    }
    public MyHashMap() {
        data = new LinkedList[BASE];
        for (int i = 0; i < BASE; i++) {
            data[i] = new LinkedList<Pair>();
        }
    }

    public void put(int key, int value) {
        int h = hash(key);
        Iterator<Pair> iterator = data[h].iterator();
        while(iterator.hasNext()){
            Pair pair = iterator.next();
            if(pair.key == key){
                pair.value = value;
                return;
            }
        }
        data[h].offerLast(new Pair(key,value));
    }

    public int get(int key) {
        int h = hash(key);
        Iterator<Pair> iterator = data[h].iterator();
        while(iterator.hasNext()){
            Pair pair = iterator.next();
            if(pair.key == key){
                return pair.value;
            }
        }
        return -1;
    }

    public void remove(int key) {
        int h = hash(key);
        Iterator<Pair> iterator = data[h].iterator();
        while(iterator.hasNext()){
            Pair pair = iterator.next();
            if(pair.key == key){
                data[h].remove(pair);
                return;
            }
        }
    }

    private int hash(int key){
        return key%BASE;
    }
}
